package club.service.impl;

import club.dao.PetMapper;
import club.pojo.Pet;
import club.service.PetService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.mapper.EntityWrapper;

import javax.annotation.Resource;
import java.util.List;

/**
 * 宠物服务实现类
 * 处理宠物信息的业务逻辑，包括分页查询、创建宠物档案、更新状态、删除等操作
 */
@Service
@Transactional // 开启事务管理，确保数据库操作的原子性
public class PetServiceImpl implements PetService {

    @Resource
    private PetMapper petMapper;
    // 注入宠物数据访问层

    /**
     * 分页查询所有宠物（无筛选条件）
     * @param pageNum 页码
     * @param pagesize 每页数量
     * @return 分页结果对象，包含宠物列表及分页信息，导航页码数为3
     */
    @Override
    public PageInfo<Pet> pets(Integer pageNum, Integer pagesize) {
        // 1. 开启分页功能
        PageHelper.startPage(pageNum, pagesize);

        // 2. 查询所有宠物（不添加条件）
        List<Pet> pets = petMapper.selectList(null);

        // 3. 封装分页结果，设置导航页码数为3
        PageInfo<Pet> pageInfo = new PageInfo<Pet>(pets, 3);
        return pageInfo;
    }

    /**
     * 根据ID查询宠物详情
     * @param id 宠物ID
     * @return 宠物对象，不存在则返回null
     */
    @Override
    public Pet findById(Integer id) {
        return petMapper.selectById(id);
        // 调用Mapper根据ID查询
    }

    /**
     * 创建新宠物档案
     * @param pet 宠物对象（需包含名称、类型等必填信息）
     * @return 插入成功返回1，失败返回0
     */
    @Override
    public Integer create(Pet pet) {
        return petMapper.insert(pet);
        // 调用Mapper插入新记录
    }

    /**
     * 分页查询宠物（支持按类型模糊筛选）
     * @param petType 宠物类型（如"猫"、"狗"，支持模糊匹配）
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @return 分页结果对象，包含匹配的宠物列表及分页信息
     */
    @Override
    public PageInfo<Pet> allPet(String petType, Integer pageNum, Integer pageSize) {
        // 1. 开启分页功能
        PageHelper.startPage(pageNum, pageSize);

        // 2. 构建查询条件：按宠物类型模糊查询
        EntityWrapper<Pet> wrapper = new EntityWrapper<>();
        if (petType != null && !"".equals(petType)) {
            wrapper.like("petType", petType);
            // 添加类型模糊查询条件
        }

        // 3. 执行查询
        List<Pet> pets = petMapper.selectList(wrapper);

        // 4. 封装分页结果，设置导航页码数为3
        PageInfo<Pet> pageInfo = new PageInfo<>(pets, 3);
        return pageInfo;
    }

    /**
     * 添加宠物（与create方法功能重复，可合并）
     * @param pet 宠物对象
     * @return 插入成功返回1，失败返回0
     */
    @Override
    public int add(Pet pet) {
        return petMapper.insert(pet);
        // 调用Mapper插入数据（与create方法逻辑相同）
    }

    /**
     * 更新宠物信息（如修改状态、备注）
     * @param pet 包含更新字段的宠物对象（需包含ID）
     * @return 更新成功返回1，失败返回0
     */
    @Override
    public int update(Pet pet) {
        return petMapper.updateById(pet);
        // 调用Mapper根据ID更新记录
    }

    /**
     * 根据ID删除宠物记录
     * @param id 宠物ID
     * @return 删除成功返回1，失败返回0
     */
    @Override
    public int del(Integer id) {
        return petMapper.deleteById(id);
        // 调用Mapper根据ID删除记录
    }
}